package com.imut.lagain.service;

import com.imut.lagain.entity.NotificationTemplate;
import com.imut.lagain.entity.Notification;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;

/**
 * 通知模板服务接口
 */
public interface NotificationTemplateService {

    /**
     * 创建通知模板
     */
    NotificationTemplate createTemplate(NotificationTemplate template);

    /**
     * 更新通知模板
     */
    NotificationTemplate updateTemplate(Long templateId, NotificationTemplate template);

    /**
     * 删除通知模板
     */
    boolean deleteTemplate(Long templateId);

    /**
     * 根据ID获取模板
     */
    Optional<NotificationTemplate> getTemplateById(Long templateId);

    /**
     * 根据代码获取模板
     */
    Optional<NotificationTemplate> getTemplateByCode(String code);

    /**
     * 获取所有启用的模板
     */
    List<NotificationTemplate> getEnabledTemplates();

    /**
     * 启用模板
     */
    boolean enableTemplate(Long templateId);

    /**
     * 禁用模板
     */
    boolean disableTemplate(Long templateId);

    /**
     * 渲染模板内容
     */
    String renderTemplate(String template, Map<String, Object> data);

    /**
     * 验证模板数据
     */
    boolean validateTemplateData(NotificationTemplate template);

    /**
     * 检查发送条件
     */
    boolean checkSendCondition(NotificationTemplate template, Map<String, Object> data);

    /**
     * 复制模板
     */
    NotificationTemplate copyTemplate(Long templateId, String newCode, String newName);

    /**
     * 根据微信模板ID获取模板
     */
    Optional<NotificationTemplate> getTemplateByWechatTemplateId(String wechatTemplateId);

    /**
     * 根据类型获取模板
     */
    List<NotificationTemplate> getTemplatesByType(Notification.NotificationType type);

    /**
     * 根据创建者获取模板
     */
    List<NotificationTemplate> getTemplatesByCreator(Long creatorId);

    /**
     * 获取所有启用的模板
     */
    List<NotificationTemplate> getAllEnabledTemplates();

    /**
     * 检查微信模板ID是否存在
     */
    boolean existsByWechatTemplateId(String wechatTemplateId);

    /**
     * 检查频率限制
     */
    boolean checkFrequencyLimit(NotificationTemplate template, Long userId, int currentCount);

    /**
     * 提取变量
     */
    Set<String> extractVariables(String content);

    /**
     * 预览模板
     */
    Map<String, Object> previewTemplate(NotificationTemplate template, Map<String, Object> sampleData);

    /**
     * 导入模板
     */
    List<NotificationTemplate> importTemplates(List<NotificationTemplate> templates);

    /**
     * 导出模板
     */
    List<NotificationTemplate> exportTemplates(List<Long> templateIds);

    /**
     * 渲染内容
     */
    String renderContent(String templateContent, Map<String, Object> data);

    /**
     * 构建微信数据
     */
    Map<String, Object> buildWechatData(NotificationTemplate template, Map<String, Object> data);

    /**
     * 检查代码是否存在
     */
    boolean existsByCode(String code);
}